//
//  XMStatus.swift
//  XMWeimo
//
//  Created by ios001 on 16/7/23.
//  Copyright © 2016年 itcast. All rights reserved.
//

import UIKit

class XMStatus: NSObject {
    // MARK: - 模型属性
    // 创建时间
    var created_at: String?
    // 微博ID
    var id: Int64 = 0 // 这里用Int可能会数据溢出,不够用反正
    // 微博信息内容
    var text: String?
    // 微博来源
    var source: String?{
        didSet{
            sourceAttr = getSourceStr(source)
        }
    }
    
    // 用户数据
    var user: XMUser?
    
    // 转发微博
    var retweeted_status:XMStatus?
    // 配图
    var pic_urls:[XMPictureInfo]?
    // 转发数
    var reposts_count: Int = 0
    // 评论数
    var comments_count: Int = 0
    // 赞数
    var attitudes_count: Int = 0
    // 微博来源处理文本
    var sourceAttr: NSMutableAttributedString?
    
    // kvc构造函数
    init(dict:[String: AnyObject]) {
        super.init()
        setValuesForKeysWithDictionary(dict)
    }
    
    // 由于当前的kvc 构造函数,只能给其当前类的属性赋值,不知道user是一个模型
    // 程序员需要自己重写setValueForKey方法
    override func setValue(value: AnyObject?, forKey key: String) {
        // 如果key == "user"
        if key == "user" {
            // 判断value是否为nil,而且是否可以转成一个字典
            guard let v = value as? [String: AnyObject] else {
                return
            }
            // 给其赋值
            user = XMUser(dict: v)
        }else if key == "retweeted_status"{
            // 判断value 是否为nil 是否可以转成一个字典
            guard let v = value as? [String: AnyObject] else{
                return
            }
            // 给其赋值
            retweeted_status = XMStatus(dict: v)
            
        }else if key == "pic_urls" {
            // 判断value是否为nil,而且是否可以转成一个数组
            guard let v = value as? [[String: AnyObject]] else{
                return
            }
            // 创建一个临时可变数组
            var tempArray:[XMPictureInfo] = [XMPictureInfo]()
            // 遍历数组 字典转模型
            for dic in v {
                // 创建一个模型
                let pic = XMPictureInfo(dict: dic)
                tempArray.append(pic)
            }
            // 对pic_urls赋值
            pic_urls = tempArray
            
        }else {
            // 还需要系统帮我们字典转模型
            super.setValue(value, forKey: key)
        }
    }
    
    override func setValue(value: AnyObject?, forUndefinedKey key: String) {
    }
}

// 以下是在MVC开发模式中,在model中做处理
extension XMStatus{
    
    // 格式,来自 XXX
    func getSourceStr(source: String?) -> NSMutableAttributedString {
//        print("瞧一瞧")
        // 判断是否为nil,而且是否保存 ">
//        print(source)
        guard let s = source where s.containsString("\">") else{
            let str = "天马行空乱七八糟"
            return getSourceAttr(str)
        }
        // 起始位置和结束位置
        let startRange = s.rangeOfString("\">")!
        let endRange = s.rangeOfString("</")!
        
        // 字符串截取
        let result = s.substringWithRange(startRange.endIndex..<endRange.startIndex)
        return getSourceAttr(result)
    }
    
    // 处理微博来源的富文本
    func getSourceAttr(result: String) -> NSMutableAttributedString {
        // 最终显示格式
        let name = "来自 " + result
        // 得到range
        let range = (name as NSString).rangeOfString("来自")
        // 创建一个可变富文本
        let attr = NSMutableAttributedString(string: name)
        // 设置属性
        attr.addAttributes([NSForegroundColorAttributeName: UIColor.grayColor()], range:range)
        return attr
    }

    
}
